/*
 * Particion.cpp
 *
 *  Created on: 19/11/2011
 *      Author: nestor
 */

#include "Particion.h"
#include <string.h>


Particion::Particion() {
	this->fd.open(FILENAME_INDICE, std::ios_base::out);
}

Particion::Particion(std::string ruta, int mode) {
	if (mode == P_OUT) {
		this->fd.open(ruta.c_str(), std::ios_base::out);
	} else if (mode == P_READ) {
		this->fd.open(ruta.c_str(), std::ios_base::in);
	}

}

int Particion::persistir(InfoTerminoIndexado* terminoInfo) {
	this->persistir(terminoInfo->getIdTermino(),
					terminoInfo->getCantDocs(),
					terminoInfo->getFrecuencias_por_IdDoc());
	return 0;
}
int Particion::persistir(unsigned long idTerm, unsigned long cantDoc, Lista<Frecuencia_por_IdDoc*>* listaFreIdDoc) {

	if (this->fd.is_open()) {
		this->fd<<std::setw(TAM_ID_TERM)<<idTerm;
		this->fd<<std::setw(TAM_CANT_DOCS)<<cantDoc;
		// todo: calcular offset
		this->fd<<std::setw(TAM_OFFSET)<<0;
	}

	return 0;
}

bool Particion::eof() {
	return this->fd.eof();
}

tTermInfoBuffer Particion::siguiente() {

	char idTermino[TAM_ID_TERM];
	char cantDocs[TAM_CANT_DOCS];
	char offset[TAM_OFFSET];

	memset(idTermino, '\0', TAM_ID_TERM);
	memset(cantDocs, '\0', TAM_CANT_DOCS);
	memset(offset, '\0', TAM_OFFSET);

	fd>>idTermino;
	fd>>cantDocs;
	fd>>offset;

	tTermInfoBuffer dummy;
	dummy.id = Util::charToLong(idTermino);
	dummy.cantDoc = Util::charToLong(cantDocs);
	dummy.offset = Util::charToLong(offset);
	return dummy;
}

bool Particion::good() {
	return fd.good();
}

Particion::~Particion() {
	fd.close();
}
